package com.example.demo.service;

import com.example.demo.dto.Admin.AdminUserCreationRequestDto; // <--- 新增导入
import com.example.demo.dto.Admin.AdminUserUpdateRequestDto;   // <--- 新增导入
import com.example.demo.dto.UserUpdateRequestDto;
import com.example.demo.entity.User;
import java.util.List;

public interface UserService {
    User register(User userToRegister);
    User login(String account, String password);
    User getUserById(Integer id);
    User getUserByAccount(String account);
    List<User> getAllUsers();
    // 修改 updateUser 方法签名以接收 UserUpdateRequestDto
    User updateUser(Integer id, UserUpdateRequestDto userUpdateRequestDto);
    User changePassword(Integer userId, String oldPassword, String newPassword);
    void deleteUser(Integer id);
    void incrementBookCount(Integer userId);
    void decrementBookCount(Integer userId);

    // --- 新增管理员操作接口定义 ---

    /**
     * 管理员创建新用户。
     *
     * @param creationRequestDto 用户创建信息 DTO
     * @return 创建的用户实体
     * @throws IllegalArgumentException 如果账号已存在
     */
    User createUserByAdmin(AdminUserCreationRequestDto creationRequestDto);

    /**
     * 管理员删除指定账号的用户。
     *
     * @param account 要删除的用户账号
     * @throws jakarta.persistence.EntityNotFoundException 如果用户未找到
     */
    void deleteUserByAdmin(String account);

    /**
     * 管理员更新指定账号的用户信息。
     *
     * @param account         要更新的用户账号
     * @param updateRequestDto 包含更新信息的用户 DTO
     * @return 更新后的用户实体
     * @throws jakarta.persistence.EntityNotFoundException 如果用户未找到
     * @throws IllegalArgumentException 如果新账号已被占用
     */
    User updateUserByAdmin(String account, AdminUserUpdateRequestDto updateRequestDto);
}
